package com.own.component.common.login.user;

import com.own.component.common.em.RequestEnum;
import com.own.component.common.exception.BusinessException;

import java.io.Serializable;
import java.util.UUID;

/**
 * BaseLoginUser（所有用户对象的父类）
 *
 * @author chenxueli
 * @date 2023-08-10 16:30:28
 */
public interface BaseLoginUser extends Serializable {

    /**
     * 获取登录的token令牌
     *
     * @return token
     */
    String token();

    /**
     * 获取登录的用户id
     *
     * @return 用户id
     */
    Long userId();

    /**
     * 获取登录的用户名称
     *
     * @return 用户名称
     */
    String userName();

    /**
     * 获取登录的账号类型
     *
     * @return 账号类型 1=普通账号 2=管理员
     */
    Integer accountType();

    /**
     * 登录的组织名称
     *
     * @return 组织名称
     */
    default String organization() {
        return "-";
    }

    /**
     * 身份信息
     *
     * @return 身份信息
     */
    default String identity() {
        return "user";
    }

    /**
     * 客户端信息
     *
     * @return 客户端信息
     */
    default String client() {
        return "web";
    }

    /**
     * 前端唯一uuid
     *
     * @return 前端唯一uuid
     */
    default String uuid() {
        return UUID.randomUUID().toString();
    }

    /**
     * json数据
     *
     * @return json数据
     */
    default String json() {
        return "{\"token\": " + token() + ", \"userId\": " + userId() + ", \"userName\": " + userName() + ", \"organization\": " + organization() + ", \"identity\": " + identity() + ", \"client\": " + client() + ", \"uuid\": " + uuid() + "}";
    }

    /**
     * 是否登录
     *
     * @return 是否已经登录
     */
    default boolean isLogin() {
        return true;
    }

    /**
     * 验证是否登录
     */
    default void checkLogin() {
        if (!isLogin()) {
            throw new BusinessException(RequestEnum.NO_LOGIN);
        }
    }

}
